package com.xin.arraydemo;

/**
 * 面试题6    p15
 * 题目:输入一个递增排序的数组和一个值k, 请问如何在数组中找出两个和为k的数字并返回它们的下标?
 * 假设数组中存在且只存在一对符合条件的数字, 同时一个数字不能使用两次.例如,输入数组[1,2,4,6,10],k的
 * 值为8,数组中的数字2与6的和为8,它们的下标分别为1与3.
 *
 */
public class Question6 {

    private static int[] twoSum(int[] arr, int target) {
        int i = 0;
        int j = arr.length - 1;

        // i为左指针, j为右指针, 当arrarr[i] + arr[j] = target时就不在循环中,
        // 所以小于target就i++, 大于target就j--;
        while (i < j && arr[i] + arr[j] != target) {
            if (arr[i] + arr[j] < target) {
                i++;
            } else {
                j--;
            }
        }
        // 2 + 6 = 8
        System.out.println(arr[i] + " + " + arr[j] + " = " + target);
        System.out.println("i: " + i);
        System.out.println("j: " + j);
        return new int[]{i, j};

    }

    public static void main(String[] args) {
        twoSum(new int[]{1, 2, 4, 6, 10}, 8);
    }
}